package com.thirteen.app.dao;

import com.thirteen.app.dto.AdminResponse.PaperListAdminDto;
import com.thirteen.app.dto.CreateExamBySearchResponse.PaperSearchDto;
import com.thirteen.app.dto.CreateExamResponse.PaperInfoExamDto;
import com.thirteen.app.dto.CreatePaperResponse.PaperCreateDto;
import com.thirteen.app.dto.PaperListResponse.PaperListTeacherDto;
import com.thirteen.app.dto.PaperRespose.PaperDto;
import com.thirteen.app.dto.PaperWithAnswerResponse.PaperWithAnswerDto;
import com.thirteen.app.dto.PaperWithScoreResponse.PaperWithScoreDto;
import com.thirteen.app.dto.PaperWithSolutionResponse.PaperWithSolutionDto;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface PaperDao {
    //    根据考试Id查出对应试卷
    PaperDto queryPaper(@Param("paperId") Integer paperId);

    //    根据考试Id查出对应试卷
    PaperWithAnswerDto queryPaperWithAnswer(@Param("paperId") Integer paperId);

    //    根据考试Id查出对应试卷
    PaperWithSolutionDto queryPaperWithSolution(@Param("paperId") Integer paperId);

    //    根据考试Id查出对应试卷
    PaperWithScoreDto queryPaperWithScore(@Param("examRecordId") Integer examRecordId);

    //    根据课程Id查出所有试卷
    List<PaperSearchDto> queryAllPaperByCourseId(@Param("courseId") Integer courseId, @Param("paperName") String paperName, @Param("offset") Integer offset, @Param("limit") Integer limit);

    //    查询试卷简略信息
    PaperInfoExamDto queryPaperInfo(@Param("paperId") Integer paperId);

    //    创建试卷
    Integer insertPaperForCreate(@Param("paperCreateDto") PaperCreateDto paperCreateDto);

    //    考试阅卷方式
    Integer isMachineJudge(@Param("examRecordId") Integer examRecordId);

    //    查询出题人姓名
    String queryUserRealName(@Param("paperId") Integer paperId);

    //    老师查询自己创建的试卷
    List<PaperListTeacherDto> queryPaperListTeacher(@Param("userId") Integer userId);

    //    管理员审批试卷
    Boolean judgePaperAuditAdmin(@Param("paperId") Integer paperId, @Param("audit") Integer audit);

    //    老师提交试卷审阅申请
    Boolean applyPaperAuditTeacher(Integer paperId);

    //    管理员试卷全查
    List<PaperListAdminDto> queryAllPaperByLimit(@Param("paperName") String paperName, @Param("courseName") String courseName, @Param("offset") Integer offset, @Param("limit") Integer limit);

    //     获取试卷数量
    Integer getPaperCount();

    //    通过考试考试Id查询
    PaperDto queryByExamId(Integer examId, Integer userId);

    //    删除试卷
    Boolean deletePaper(Integer paperId);

    //    查询试卷数量
    Integer queryPaperCount();

}
